package webing.dao;

import java.sql.*;

import java.util.*;

import webing.excepcion.DAOExcepcion;
import webing.modelo.especialidad;
import webing.util.ConexionBD;

public class especialidadDAO extends  baseDAO {
	
	public void insertar(especialidad vo) throws DAOExcepcion {
		System.out.println("especialidadDAO: insertar (especialidad vo)");
		String query = "INSERT INTO especialidad(nombreespecialidad, descripcion) VALUES (?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombreespecialidad());
			stmt.setString(2, vo.getDescripcion());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
	}
	
	public void actualizarEspecialidad(especialidad vo) throws DAOExcepcion {
		System.out.println("especialidadDAO: actualizar(especialidad vo)");
		String query = "update especialidad set descripcion=? where nombreespecialidad=?"; 	
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			
			stmt.setString(1, vo.getDescripcion());
			stmt.setString(2, vo.getNombreespecialidad());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	

	public Collection<especialidad> listar() throws DAOExcepcion {
		System.out.println("especialidadDAO: listar()");
		Collection<especialidad> c = new ArrayList<especialidad>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT nombreespecialidad, descripcion from especialidad";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				
				especialidad vo = new especialidad();
				
				vo.setNombreespecialidad(rs.getString("nombreespecialidad"));
				vo.setDescripcion(rs.getString("descripcion"));
				
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
    public Collection<especialidad> buscarNombreEspecialidad(String nombre) throws DAOExcepcion { 
	System.out.println("especidaliddDAO: buscarNombreEspecialidad(String nombre)"); 
	String query = "SELECT nombreespecialidad, descripcion FROM especialidad WHERE nombreespecialidad like ?";
	
	Collection<especialidad> lista = new ArrayList<especialidad>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, "%" + nombre + "%"); 
		rs = stmt.executeQuery();
		while (rs.next()) {
			especialidad vo = new especialidad();
			vo.setNombreespecialidad(rs.getString("nombreespecialidad"));
			vo.setDescripcion(rs.getString("descripcion"));
			lista.add(vo);
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return lista;
    }

	public void eliminar(String nombreespecialidad) throws DAOExcepcion {
		  System.out.println("especialidadDAO: eliminar(String nombreespecialidad)");
		  String query = "DELETE FROM especialidad WHERE nombreespecialidad = ?";
		  Connection con = null;
		  PreparedStatement stmt = null;
		  try {
			  		con = ConexionBD.obtenerConexion();
		            stmt = con.prepareStatement(query);
		            stmt.setString(1, nombreespecialidad);
		            int i = stmt.executeUpdate();
		            if (i != 1) {
		                    throw new SQLException("No se pudo eliminar");
		            }
		    } catch (SQLException e) {
		            System.err.println(e.getMessage());
		            throw new DAOExcepcion(e.getMessage());
		    } finally {
		            this.cerrarStatement(stmt);
		            this.cerrarConexion(con);
		    }
		}}